Java 实现最大堆(1) 您所在的位置:网站首页 java 最大堆 Java 实现最大堆(1)

Java 实现最大堆(1)

2024-07-08 23:58| 来源: 网络整理| 查看: 265

return heap;

}

public HeapImpl() {

this.heap = new ArrayList();

}

/**

* 插入对应上浮

*

* @param start

*/

protected void adjustUp(int start) {

int currentIndex = start;

int parentIndex = (currentIndex - 1) / 2;

T tmp = heap.get(currentIndex);

while (currentIndex > 0) {

int cmp = heap.get(parentIndex).compareTo(tmp);

if (cmp >= 0) {

break;

} else {

heap.set(currentIndex, heap.get(parentIndex));

currentIndex = parentIndex;

parentIndex = (parentIndex - 1) / 2;

}

}

heap.set(currentIndex, tmp);

}

public void insert(T data) {

int size = heap.size();

heap.add(data); // 将"数组"插在表尾

adjustUp(size); // 向上调整堆

}

public void remove(int index) {

int size = heap.size();

heap.set(index, heap.get(size - 1));

heap.remove(size - 1);

adjustDown(index);

}

/**

* 删除对应下沉

*

* @param index

*/

private void adjustDown(int index) {

int currentIndex = index;

int leftChildIndex = index * 2 + 1;

int rightChildIndex = index * 2 + 2;

T tmp = heap.get(currentIndex);

int size = heap.size();

while (leftChildIndex < size) {

T left = null;

T right = null;

if (leftChildIndex < size) {

left = heap.get(leftChildIndex);

}

if (rightChildIndex < size) {

right = heap.get(rightChildIndex);

}

int maxIndex = right == null ? leftChildIndex : (left.compareTo(right) >= 0 ? leftChildIndex : rightChildIndex);

T max = heap.get(maxIndex);

if(tmp.compareTo(max)>= 0){

break;

} else{

heap.set(currentIndex, max);

heap.set(maxIndex, tmp);

leftChildIndex = maxIndex * 2 + 1;

rightChildIndex = maxIndex + 1;

}

}

}

public void makeHeap(int first, int last) {

for ( int i = first; i < last; i++) {

insert(orginList.get(i));

}

}

public void popHeap(int first, int last) {

remove(first);

}

public void pushHeap(int first, int last) {

adjustUp(last - 1);

}

public void display() {

System.out.println(heap);

}

public static void main(String[] args) {

IHeap heap = new HeapImpl();

heap.initOriginList(Arrays.asList( 10, 20, 30, 5, 15));

System.out.println( “初始构建堆:”);

heap.makeHeap( 0, 5);

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新! i4aZgod-1715705074030)]

[外链图片转存中…(img-Rt4k73f1-1715705074030)]

[外链图片转存中…(img-06Tzpk0s-1715705074030)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有